home *** CD-ROM | disk | FTP | other *** search
/ Aminet 50 / Aminet 50 (2002)(GTI - Schatztruhe)[!][Aug 2002].iso / Aminet / util / wb / BWS_Scalos.lha / BWS_Scalos / amigaini / amigaini.library.e < prev    next >
Text File  |  2001-12-05  |  13KB  |  646 lines

  1. OPT PREPROCESS
  2. OPT STACK=32000
  3.  
  4. LIBRARY 'amigaini.library',
  5.         6,02,
  6.         '$VER: amigaini.library 6.02b (26.11.2001) INI lib for AmigaOS' IS
  7.             ini_Init,
  8.             ini_Read,
  9.             ini_Write,
  10.             ini_GroupPos,
  11.             ini_FindGroup,
  12.             ini_NewGroup,
  13.             ini_NewItem,
  14.             ini_Get,
  15.             ini_Set,
  16.             ini_GetStr,
  17.             ini_SetStr,
  18.             ini_GetInt,
  19.             ini_SetInt,
  20.             ini_GetArray,
  21.             ini_SetArray,
  22.             ini_Strip,
  23.             ini_SetErrorTexts,
  24.             ini_GetErrorMsg,
  25.             ini_Bracket,
  26.             ini_IsGroup,
  27.             ini_GroupLen,
  28.             ini_FindItem,
  29.             ini_RemGroup,
  30.             ini_RemItem,
  31.             ini_NextGroup,
  32.             ini_PrevGroup,
  33.             ini_GroupName,
  34.             ini_Str2Array,
  35.             ini_Array2Str,
  36.             ini_SplitItem
  37.  
  38.  
  39.  
  40. MODULE 'tools/file','*amigainibase','utility/tagitem'
  41.  
  42. PROC main() IS EMPTY
  43.  
  44.  
  45.  
  46. PROC ini_Init(ai:PTR TO amigaini,filename) HANDLE; DEF rv
  47. ai.filename:=filename
  48. ai.error:=INIE_Ok
  49. ai.errortexts := [
  50.     'Ok',
  51.     'File does not exist',
  52.     'File length is NIL?',
  53.     'Unable to open File',
  54.     'Did not find Header',
  55.     'did not find Item',
  56.     'Memory Error',
  57.     'New Item was added',
  58.     'User command Error',
  59.     'Unknown Error',
  60.     'Header Already Exists',
  61.     'Invalid ErrorText Array',
  62.     0
  63.     ]
  64.  
  65.      IF ListLen(ai.errortexts)<>INIV_NumOfErrorTexts
  66.      ai.error:=INIE_ErrorTextNum
  67.      Raise(ai.error)
  68.      ENDIF
  69.  
  70. ai.list:=0
  71. ai.length:=0
  72. ai.groupstart:=0
  73. ai.groupend:=0
  74. ai.paramstr:= '='
  75. ai.arraystr:= ','
  76. ai.arraytype:= INIV_Type_Str
  77. ai.casesense:= INIV_Case_Ignore
  78. ai.autoadd:= INIV_AutoAdd_On
  79. EXCEPT
  80. rv:=ai.error
  81. ENDPROC rv
  82.  
  83. PROC ini_Read(ai:PTR TO amigaini) HANDLE; DEF m,l,n,file
  84.  
  85. file:=ai.filename
  86.  
  87. n:=FileLength(file)
  88. IF n=-1 THEN Raise(INIE_File)
  89. IF n=0 THEN Raise(INIE_Length)
  90.  
  91. m,l:=readfile(file)
  92. n:=countstrings(m,l)
  93. IF ai.list THEN DisposeLink(ai.list)
  94. ai.list:=stringsinfile(m,l,n)
  95. ai.length:=n
  96. ai.error:=INIE_Ok
  97.  
  98. EXCEPT
  99. IF exception="OPEN" THEN exception:=INIE_Open
  100. IF exception="MEM" THEN exception:=INIE_Mem
  101. ai.error:=exception
  102. ENDPROC ai.error
  103.  
  104. PROC ini_Write(ai:PTR TO amigaini) HANDLE; DEF h,c
  105.  
  106. IF (h:=Open(ai.filename,NEWFILE))=0 THEN Raise(INIE_File)
  107.  FOR c:=0 TO ai.length-1
  108.  Write(h,ai.list[c],StrLen(ai.list[c]))
  109.  Write(h,'\n',1)
  110.  ENDFOR
  111. Close(h)
  112. ai.error:=INIE_Ok
  113. EXCEPT
  114. IF exception="OPEN" THEN exception:=INIE_Open
  115. ai.error:=exception
  116. ENDPROC ai.error
  117.  
  118. PROC ini_GroupPos(ai:PTR TO amigaini,text); DEF c=0,s
  119. s:=ini_Bracket(text)
  120.  
  121.  WHILE c<ai.length
  122.   IF strcmp(ai.list[c],s,ai.casesense)
  123.   ai.error:=0
  124.   ai.groupstart:=c
  125.   RETURN ai.groupstart
  126.   ENDIF
  127.  c++
  128.  ENDWHILE
  129. ai.error:=INIE_Header
  130. ENDPROC -1
  131.  
  132.  
  133. /* ---------------------------------------------------------*/
  134.  
  135. PROC ini_PrevGroup(ai:PTR TO amigaini)
  136. DEF c
  137.  FOR c:=ai.groupstart-1 TO 0 STEP -1
  138.   IF ini_IsGroup(ai.list[c])
  139.   ini_FindGroup(ai,ai.list[c])
  140.   RETURN -1
  141.   ENDIF
  142.  ENDFOR
  143. ENDPROC 0
  144.  
  145.  
  146. PROC ini_NextGroup(ai:PTR TO amigaini)
  147. DEF c
  148.  FOR c:=ai.groupend TO ai.length-1
  149.   IF ini_IsGroup(ai.list[c])
  150.   ini_FindGroup(ai,ai.list[c])
  151.   RETURN -1
  152.   ENDIF
  153.  ENDFOR
  154. ENDPROC 0
  155.  
  156. PROC ini_GroupName(ai:PTR TO amigaini); DEF s,l
  157. IF ini_IsGroup(ai.list[ai.groupstart])
  158. l:=StrLen(ai.list[ai.groupstart])-2
  159. s:=String(l)
  160. MidStr(s,ai.list[ai.groupstart],1,l)
  161. RETURN s
  162. ENDIF
  163. ENDPROC ''
  164.  
  165.  
  166.  
  167. PROC ini_FindGroup(ai:PTR TO amigaini,title); DEF c
  168.  
  169.  IF StrLen(title)<1
  170.  ai.error:=INIE_Command
  171.  RETURN -1
  172.  ENDIF
  173.  
  174.  IF ini_GroupPos(ai,title) = -1
  175.  ai.error:=INIE_Header
  176.  RETURN -1
  177.  ENDIF
  178.  
  179. c:= ai.groupstart+1
  180. ai.groupend := (ai.length-1)
  181.  
  182.  WHILE (c<ai.length) AND (ai.groupend = (ai.length-1)) DO IF ini_IsGroup(ai.list[c++]) THEN ai.groupend:=(c-2)
  183.  
  184.  
  185.  
  186. /*
  187.  IF StrLen(ai.list[ai.groupend])=0
  188.  REPEAT
  189.   ai.groupend--
  190.   UNTIL StrLen(ai.list[ai.groupend])>0
  191.  ENDIF
  192. */
  193.  
  194. ENDPROC ai.groupstart
  195.  
  196.  
  197.  
  198. PROC ini_FindItem(ai:PTR TO amigaini,title,whole); DEF c,s,e,st[256]:STRING
  199.  IF StrLen(title)<1
  200.  ai.error:=INIE_Command
  201.  RETURN
  202.  ENDIF
  203.  
  204. s:=(IF whole THEN 0 ELSE ai.groupstart +1)
  205. e:=(IF whole THEN ai.length-1 ELSE ai.groupend)
  206.  
  207.  FOR c:=s TO e
  208.  IF ini_SplitItem(ai,c,st,0) THEN
  209.    IF strcmp(st,title,ai.casesense) THEN RETURN c
  210.  ENDFOR
  211. ENDPROC -1
  212.  
  213.  
  214.  
  215. PROC ini_NewGroup(ai:PTR TO amigaini,title); DEF c,l
  216.  IF StrLen(title)<1
  217.  ai.error:=INIE_Command
  218.  RETURN ai.error
  219.  ENDIF
  220.  
  221. ini_FindGroup(ai,title)
  222.  IF ai.error=INIE_Ok
  223.  ai.error:=INIE_GotHeader
  224.  RETURN ai.error
  225.  ENDIF
  226.  
  227. c:=ini_Bracket(title)
  228.  
  229. IF ai.list
  230. l:=List(ai.length)
  231. ListCopy(l,ai.list)
  232. DisposeLink(ai.list)
  233. ENDIF
  234.  
  235. ai.list:=List(ai.length+1)
  236. IF ai.length >0 THEN ListCopy(ai.list,l)
  237. ListAdd(ai.list,[news(c)])
  238. ai.length:=ListLen(ai.list)
  239. SetList(ai.list,ai.length)
  240. ai.groupstart:=ai.length-1
  241. ai.groupend:=ai.length-1
  242. ai.error:=INIE_Ok
  243. ENDPROC ai.error
  244.  
  245.  
  246.  
  247. PROC ini_NewItem(ai:PTR TO amigaini,name,type,value)
  248. DEF c,l:PTR TO LONG,t,s
  249.  
  250. IF type<INIV_Type_Blank
  251.  IF StrLen(name)<1
  252.  ai.error:=INIE_Command
  253.  RETURN ai.error
  254.  ENDIF
  255. ENDIF
  256.  
  257. IF ai.list
  258. l:=List(ai.length)
  259. ListCopy(l,ai.list)
  260. DisposeLink(ai.list)
  261. ENDIF
  262.  
  263. IF type<INIV_Type_Blank
  264. s:=String(StrLen(name)+1)
  265. StringF(s,'\s\s',name,ai.paramstr)
  266. ENDIF
  267.  
  268. ai.list:=List(ai.length+1)
  269.  
  270. FOR c:=0 TO ai.groupend DO ListAdd(ai.list,[l[c]])
  271.  
  272. IF type=INIV_Type_Info
  273. ListAdd(ai.list,[value])
  274. ELSE
  275. ListAdd(ai.list,[IF type<>INIV_Type_Blank THEN s ELSE ''])
  276. ENDIF
  277.  
  278. FOR c:=(ai.groupend+1) TO ai.length-1 DO ListAdd(ai.list,[l[c]])
  279. ai.length:=ListLen(ai.list)
  280.  
  281. SetList(ai.list,ai.length)
  282. ai.groupend:=ai.groupend+1
  283. ai.error:=INIE_Ok
  284.  
  285.   IF type<INIV_Type_Blank
  286.   t:=ai.autoadd
  287.   ai.autoadd:=INIV_AutoAdd_Off
  288.   ini_Set(ai,name,type,value)
  289.   ai.autoadd:=t
  290.   ENDIF
  291. ENDPROC ai.error
  292.  
  293.  
  294.  
  295.  
  296. PROC ini_RemItem(ai:PTR TO amigaini,name)
  297. DEF c,l:PTR TO LONG
  298.  
  299.  IF StrLen(name)<1
  300.  ai.error:=INIE_Command
  301.  RETURN ai.error
  302.  ENDIF
  303.  
  304.  IF ai.groupstart<1
  305.  ai.error:=INIE_Header
  306.  RETURN ai.error
  307.  ENDIF
  308.  
  309.  IF (c:=ini_FindItem(ai,name,0))=-1
  310.  ai.error:=INIE_Item
  311.  RETURN ai.error
  312.  ENDIF
  313.  
  314. l:=List(ai.length)
  315. ListCopy(l,ai.list)
  316. DisposeLink(ai.list)
  317. ai.list:=List(ai.length-1)
  318.  
  319. ListCopy(ai.list,l,c)
  320.  
  321. FOR c:=(c+1) TO ai.length-1 DO ListAdd(ai.list,[l[c]])
  322. ai.length:=ListLen(ai.list)
  323.  
  324. SetList(ai.list,ai.length)
  325. ai.groupend:=ai.groupend-1
  326. ai.error:=INIE_Ok
  327. ENDPROC ai.error
  328.  
  329.  
  330.  
  331. PROC ini_RemGroup(ai:PTR TO amigaini,name)
  332. DEF c,l:PTR TO LONG,ln
  333.  
  334.  IF StrLen(name)<1
  335.  ai.error:=INIE_Command
  336.  RETURN ai.error
  337.  ENDIF
  338.  
  339.  IF (c:=ini_FindGroup(ai,name))=-1
  340.  ai.error:=INIE_Header
  341.  RETURN ai.error
  342.  ENDIF
  343.  
  344. ln:=ini_GroupLen(ai)
  345.  
  346. l:=List(ai.length)
  347. ListCopy(l,ai.list)
  348. DisposeLink(ai.list)
  349.  
  350. ai.list:=List(ai.length-ln)
  351.  
  352. ListCopy(ai.list,l,ai.groupstart)
  353.  
  354. FOR c:=(ai.groupstart+ln) TO ai.length-1 DO ListAdd(ai.list,[l[c]])
  355. ai.length:=ListLen(ai.list)
  356.  
  357. SetList(ai.list,ai.length)
  358. ai.groupstart:=0
  359. ai.groupend:=0
  360. ai.error:=INIE_Ok
  361. ENDPROC ai.error
  362.  
  363.  
  364.  
  365. PROC ini_Get(ai:PTR TO amigaini,name,typ,def)
  366. SELECT typ
  367. CASE INIV_Type_Str; RETURN ini_GetStr(ai,name,def)
  368. CASE INIV_Type_Int; RETURN ini_GetInt(ai,name,def)
  369. CASE INIV_Type_Array; RETURN ini_GetArray(ai,name,def)
  370. ENDSELECT
  371. ENDPROC INIV_Nop
  372.  
  373. PROC ini_Set(ai:PTR TO amigaini,name,typ,value);
  374. SELECT typ
  375. CASE INIV_Type_Str; ini_SetStr(ai,name,value)
  376. CASE INIV_Type_Int; ini_SetInt(ai,name,value)
  377. CASE INIV_Type_Array; ini_SetArray(ai,name,value)
  378. ENDSELECT
  379. ENDPROC
  380.  
  381.  
  382.  
  383.  
  384. PROC ini_GetStr(ai:PTR TO amigaini,name,def:PTR TO CHAR)
  385. DEF c,s1[256]:STRING,s2[512]:STRING
  386.  IF StrLen(name)<1
  387.  ai.error:=INIE_Command
  388.  RETURN ai.error
  389.  ENDIF
  390.  
  391.  FOR c:=1 TO ini_GroupLen(ai)-1
  392.  IF ini_SplitItem(ai,ai.groupstart+c,s1,s2)
  393.    IF strcmp(s1,name,ai.casesense)
  394.    ai.error:=INIE_Ok
  395.    RETURN news(s2)
  396.    ENDIF
  397.  ENDIF
  398.  ENDFOR
  399. ai.error:=INIE_Item
  400. IF ai.autoadd
  401. ini_NewItem(ai,name,INIV_Type_Str,def)
  402. IF ai.error=INIE_Ok THEN ai.error:=INIE_Added
  403. ENDIF
  404. ENDPROC def
  405.  
  406.  
  407. PROC ini_SetStr(ai:PTR TO amigaini,name,str)
  408. DEF c,s[512]:STRING,realname,s1[256]:STRING
  409.  IF StrLen(name)<1
  410.  ai.error:=INIE_Command
  411.  RETURN
  412.  ENDIF
  413.  
  414.  FOR c:=1 TO ini_GroupLen(ai)-1
  415.    IF ini_SplitItem(ai,ai.groupstart+c,s1,0)
  416.      IF strcmp(s1,name,ai.casesense)
  417.      realname:=s1
  418.      ai.error:=INIE_Ok
  419.      StringF(s,'\s\s\s',realname,ai.paramstr,str)
  420.      ai.list[ai.groupstart+c]:=news(s)
  421.      RETURN
  422.      ENDIF
  423.    ENDIF
  424.  ENDFOR
  425. ai.error:=INIE_Item
  426. IF ai.autoadd
  427. ini_NewItem(ai,name,INIV_Type_Str, str)
  428. IF ai.error=INIE_Ok THEN ai.error:=INIE_Added
  429. ENDIF
  430. ENDPROC
  431.  
  432.  
  433.  
  434. PROC ini_GetInt(ai:PTR TO amigaini,name,def);
  435. DEF num,c,s1[256]:STRING,s2[512]:STRING
  436.  IF StrLen(name)<1
  437.  ai.error:=INIE_Command
  438.  RETURN ai.error
  439.  ENDIF
  440.  
  441.  FOR c:=1 TO ini_GroupLen(ai)-1
  442.  IF ini_SplitItem(ai,ai.groupstart+c,s1,s2)
  443.    IF strcmp(s1,name,ai.casesense)
  444.    ai.error:=INIE_Ok
  445.    num:=New(SIZEOF LONG)
  446.    num:=Val(s2)
  447.    RETURN num
  448.    ENDIF
  449.  ENDIF
  450.  ENDFOR
  451. ai.error:=INIE_Item
  452. IF ai.autoadd
  453. ini_NewItem(ai,name,INIV_Type_Int,def)
  454. IF ai.error=INIE_Ok THEN ai.error:=INIE_Added
  455. ENDIF
  456. ENDPROC def
  457.  
  458. PROC ini_SetInt(ai:PTR TO amigaini,name,num)
  459. DEF c,s[256]:STRING,realname,s1[256]:STRING
  460.  IF StrLen(name)<1
  461.  ai.error:=INIE_Command
  462.  RETURN
  463.  ENDIF
  464.  
  465.  FOR c:=1 TO ini_GroupLen(ai)-1
  466.  IF ini_SplitItem(ai,ai.groupstart+c,s1,0)
  467.   IF strcmp(s1,name,ai.casesense)
  468.    realname:=s1
  469.    ai.error:=INIE_Ok
  470.    StringF(s,'\s\s\d',realname,ai.paramstr,num)
  471.    ->DisposeLink(ai.list[ai.groupstart+c])
  472.    ai.list[ai.groupstart+c]:=news(s)
  473.    RETURN
  474.    ENDIF
  475.  ENDIF
  476.  ENDFOR
  477. ai.error:=INIE_Item
  478. IF ai.autoadd
  479. ini_NewItem(ai,name,INIV_Type_Int,num)
  480. IF ai.error=INIE_Ok THEN ai.error:=INIE_Added
  481. ENDIF
  482. ENDPROC
  483.  
  484.  
  485. PROC ini_GetArray(ai:PTR TO amigaini,name,def:PTR TO LONG)
  486. DEF ar:PTR TO LONG,c,s1[256]:STRING,s2[512]:STRING
  487.  IF StrLen(name)<1
  488.  ai.error:=INIE_Command
  489.  RETURN ai.error
  490.  ENDIF
  491.  
  492.  FOR c:=1 TO ini_GroupLen(ai)-1
  493.   IF ini_SplitItem(ai,ai.groupstart+c,s1,s2)
  494.   IF strcmp(s1,name,ai.casesense)
  495.     ai.error:=0
  496.     ar:=ini_Str2Array(s2,ai.arraystr,ai.arraytype)
  497.     RETURN ar
  498.     ENDIF
  499.   ENDIF
  500.  ENDFOR
  501. ai.error:=INIE_Item
  502. IF ai.autoadd
  503. ini_NewItem(ai,name,INIV_Type_Array, def)
  504. IF ai.error=INIE_Ok THEN ai.error:=INIE_Added
  505. ENDIF
  506. ENDPROC def
  507.  
  508. PROC ini_SetArray(ai:PTR TO amigaini,name,ar:PTR TO LONG)
  509. DEF c,realname,s1[256]:STRING
  510.  
  511.  IF StrLen(name)<1
  512.  ai.error:=INIE_Command
  513.  RETURN
  514.  ENDIF
  515.  
  516.  FOR c:=1 TO ini_GroupLen(ai)-1
  517.  IF ini_SplitItem(ai,ai.groupstart+c,s1,0)
  518.   IF strcmp(s1,name,ai.casesense)
  519.     realname:=getrealname(name,ai,c)
  520.     ai.error:=0
  521.     ->DisposeLink(ai.list[ai.groupstart+c])
  522.     ai.list[ai.groupstart+c]:=ini_Array2Str(ar, name, ai.paramstr, ai.arraystr, ai.arraytype)
  523.     RETURN
  524.     ENDIF
  525.   ENDIF
  526.  ENDFOR
  527.  
  528. -> else not found
  529.  
  530. ai.error:=INIE_Item
  531.   IF ai.autoadd
  532.   ini_NewItem(ai,name,INIV_Type_Array,ar)
  533.   IF ai.error=INIE_Ok THEN ai.error:=INIE_Added
  534.   ENDIF
  535. ENDPROC
  536.  
  537. PROC ini_Str2Array(st,ch,typ); DEF a,c=0,n=0,p=0,t,s[512]:STRING
  538. t:=news(st)
  539.  
  540. REPEAT
  541.  c:=InStr(t,ch,c)
  542.  c:=(c+StrLen(ch))
  543.  n++
  544. UNTIL c<StrLen(ch)
  545.  
  546. a:=List(n)
  547.   FOR c:=0 TO n-1
  548.   p:=InStr(t,ch)
  549.   IF p<>0 THEN StrCopy(s,t,p) ELSE StrCopy(s,'')
  550.   ListAdd(a,[IF typ=INIV_Type_Str THEN news(s) ELSE Val(s)])
  551.   MidStr(t,t,p+StrLen(ch))
  552.   ENDFOR
  553. ENDPROC a
  554.  
  555. PROC ini_Array2Str(a:PTR TO LONG,n,ps,as,typ); DEF c,s
  556. s:=String(512)
  557. StringF(s,'\s\s',n,ps)
  558. FOR c:=0 TO ListLen(a)-1
  559. StringF(s,IF typ=INIV_Type_Str THEN '\s\s\s' ELSE '\s\d\s', s,a[c],as)
  560. ENDFOR
  561. SetStr(s,StrLen(s)-1)
  562. ENDPROC s
  563.  
  564.  
  565. PROC ini_Strip(ai:PTR TO amigaini); DEF c,a=0,l
  566. -> get amount of blank lines
  567. FOR c:=0 TO ai.length-1 DO IF StrLen(ai.list[c])=0 THEN a++
  568.  
  569. -> no blanks so return
  570. IF a=0 THEN RETURN
  571.  
  572. -> Copy list
  573. l:=List(ai.length)
  574. ListCopy(l,ai.list)
  575.  
  576. -> clear ai.list
  577. DisposeLink(ai.list)
  578.  
  579. ->renew ai.list with new size
  580. ai.list:=List(ai.length-a)
  581.  
  582. -> copy without blanks
  583. FOR c:=0 TO ai.length-1 DO IF StrLen(ListItem(l,c))<>0 THEN ListAdd(ai.list,[ListItem(l,c)])
  584. -> Set new length
  585. ai.length:=ai.length-a
  586. ENDPROC
  587.  
  588. PROC ini_SetErrorTexts(ai:PTR TO amigaini,a:PTR TO LONG)
  589.  
  590. IF ListLen(a)<>INIV_NumOfErrorTexts
  591. ai.error:=INIE_Command
  592. RETURN
  593. ENDIF
  594. IF ListLen(ai.errortexts)<1 THEN ai.errortexts:=List(INIV_NumOfErrorTexts)
  595. ListCopy(ai.errortexts,a,INIV_NumOfErrorTexts)
  596. SetList(ai.errortexts,INIV_NumOfErrorTexts)
  597. ENDPROC
  598.  
  599. PROC ini_GetErrorMsg(ai:PTR TO amigaini) IS ai.errortexts[ai.error]
  600.  
  601. PROC ini_Bracket(t); DEF s,has=0
  602. has:=ini_IsGroup(t)
  603. s:=String(StrLen(t)+(IF has THEN 0 ELSE 2))
  604. StringF(s,IF has THEN '\s' ELSE '[\s]',t)
  605. ENDPROC s
  606.  
  607. PROC strcmp(s1,s2,case=0)
  608. DEF u1,u2
  609. IF case=INIV_Case_Sense THEN RETURN StrCmp(s1,s2)
  610. u1:=String(StrLen(s1))
  611. u2:=String(StrLen(s2))
  612. StrCopy(u1,s1)
  613. StrCopy(u2,s2)
  614. UpperStr(u1)
  615. UpperStr(u2)
  616. ENDPROC StrCmp(u1,u2)
  617.  
  618. /*
  619. PROC instr(s1,s2,case=0)
  620. DEF u1,u2
  621. IF case=INIV_Case_Sense THEN RETURN InStr(s1,s2)
  622. u1:=String(StrLen(s1))
  623. u2:=String(StrLen(s2))
  624. StrCopy(u1,s1)
  625. StrCopy(u2,s2)
  626. UpperStr(u1)
  627. UpperStr(u2)
  628. ENDPROC InStr(u1,u2)
  629. */
  630.  
  631. PROC news(os); DEF ns; ns:=String(StrLen(os));StrCopy(ns,os); ENDPROC ns
  632. PROC getrealname(name,ai:PTR TO amigaini,item); DEF rn; rn:=String(StrLen(name)); StrCopy(rn,ai.list[ai.groupstart+item],StrMax(rn)); ENDPROC rn
  633. PROC ini_IsGroup(t) IS (t[0]="[") AND (t[StrLen(t)-1]="]")
  634.  
  635.  
  636. PROC ini_GroupLen(ai:PTR TO amigaini) IS (ai.groupend-ai.groupstart)+1
  637.  
  638.  
  639. PROC ini_SplitItem(ai:PTR TO amigaini,pos,s1:PTR TO CHAR,s2:PTR TO CHAR)
  640. DEF p
  641. p:=InStr(ai.list[pos],ai.paramstr)
  642. IF p=-1 THEN RETURN 0
  643. IF s1 THEN StrCopy(s1,ai.list[pos],p)
  644. IF s2 THEN MidStr(s2,ai.list[pos],p+1)
  645. ENDPROC 1
  646.